﻿using System;
using System.Collections.Generic;
using System.Linq;

namespace CRM.Database.Model
{
    public class TrainingsParticipantsCollection : AbstractCollection
    {
        /// <summary>
        /// Стaтическая коллекция 
        /// </summary>
        protected static List<TrainingsParticipants> _list;

        /// <summary>
        /// Список объектов
        /// </summary>
        public List<TrainingsParticipants> TrainingsParticipantsList
        {
            get
            {
                return Entities.TrainingsParticipants.ToList();
                if (_list == null)
                    _list = DB.Entities.TrainingsParticipants.ToList();
                return _list;
            }
        }

        /// <summary>
        /// Обнуление статической коллекции
        /// </summary>
        protected override void SetStaticListToNULL()
        {
            _list = null;
        }

        /// <summary>
        /// Получение статического списка для хранения объектов
        /// </summary>
        /// <returns></returns>
        public override object GetStaticCollection()
        {
            return _list;
        }

        /// <summary>
        /// Получение элемента из коллекции по идентификатору
        /// </summary>
        /// <param name="itemId">Идентификатор</param>
        /// <returns>Элемент</returns>
        public override object GetItemById(int itemId)
        {
            return Entities.TrainingsParticipants.Find(itemId);
        }

        /// <summary>
        /// Добавить лист участников в базу
        /// </summary>
        /// <param name="list"></param>
        /// <param name="idRequest"></param>
        /// <param name="username"></param>
        /// <returns></returns>
        public bool AddList(List<TrainingsParticipants> list, int idRequest, string username)
        {
            if (list.Count < 1 || idRequest < 1 || string.IsNullOrEmpty(username)) return false;
            var participantsCol = new TrainingsParticipantsCollection();
            foreach (TrainingsParticipants item in list)
            {
                if (item != null)
                {
                    item.IdTrainingsParticipant = -1;
                    item.IdTrainingsRequest = idRequest;
                    item.Fill();
                    if (!participantsCol.Add(item, username)) return false;
                }
            }
            return true;
        }

        /// <summary>
        /// Возвращает список участников всех заявок выбранного расписания
        /// </summary>
        /// <param name="scheduleId"></param>
        /// <returns></returns>
        public List<TrainingsParticipants> GetParticipantsByScheduleId(int scheduleId)
        {
            var result = new List<TrainingsParticipants>();
            foreach (TrainingsParticipants participant in TrainingsParticipantsList)
            {
                if (participant.TrainingsRequests != null)
                    if (participant.TrainingsRequests.IdTrainingsSchedule == scheduleId)
                        result.Add(participant);
            }
            return result;
        }

        /// <summary>
        /// Возвращает список участников заявки на обучение
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public List<TrainingsParticipants> GetParticipantsByRequest(TrainingsRequests request)
        {
            var result = new List<TrainingsParticipants>();
            if (request != null)
            {
                foreach (TrainingsParticipants item in TrainingsParticipantsList)
                {
                    if (item.IdTrainingsRequest == request.IdTrainingsRequest)
                        result.Add(item);
                }
                if (result.Count > 0)
                    return result;
            }
            return result;
        }

        #region Overrides of AbstractCollection

        /// <summary>
        /// Обновление элемента в коллекции
        /// </summary>
        /// <param name="item">Новый элемент</param>
        /// <param name="userLogin">Логин пользователя, который делает изменения</param>
        /// <returns>Результат операции</returns>
        public bool Update(object item, string userLogin)
        {
            var newObject = (TrainingsParticipants) item;
            if (newObject == null)
                return false;

            var object4Update = GetItemByIdFromDatabase(newObject.GetKeyValue()) as TrainingsParticipants;
            if (object4Update == null)
                return false;

            if (!string.IsNullOrEmpty(newObject.ParticipantName))
                object4Update.ParticipantName = newObject.ParticipantName;

            if (!string.IsNullOrEmpty(newObject.ParticipantPosition))
                object4Update.ParticipantPosition = newObject.ParticipantPosition;

            object4Update.IdTrainingsRequest = newObject.IdTrainingsRequest;
            object4Update.IdTrainingsParticipantsStatus = newObject.IdTrainingsParticipantsStatus;

            return base.Update(object4Update, userLogin);
        }

        /// <summary>
        /// Получение списка элементов
        /// </summary>
        /// <returns>Список элементов</returns>
        public override List<object> GetList()
        {
            return new List<object>(TrainingsParticipantsList);
        }

        /// <summary>
        /// Получение типа текущего элемента
        /// </summary>
        /// <returns></returns>
        protected override Type GetItemType()
        {
            return typeof (TrainingsParticipants);
        }

        #endregion
    }
}

///// <summary>
//        /// Проверяет наличие у клиента хотя бы одного правильно заполненного Юр. Лица с контактами для подачи заявки
//        /// </summary>
//        /// <returns></returns>
//        public bool IsReadyForRequests
//        {
//            get
//            {
//                var legalEntityCol = new LegalEntitiesCollection();
//                var list = legalEntityCol.GetFullDefinedLegalEntitiesByCustomerId(IdCustomer);
//                return list.Count > 0;
//            }
//        }